<template>
    <view class="viewport">
        <!-- 推荐封面 -->
        <view class="cover">
            <image
               :src="bannerPicture" />
        </view>
        <!-- tab栏 -->
        <view class="tabs">
            <text 
             class="text"
            @click="activeId = item.id" :class="{ active: activeId === item.id }"
            v-for="item in subTypes" :key="item.id"> 
             {{ item.title }}
            </text>
        </view>
     <!-- 列表内容 -->
        <scroll-view @scrolltolower="onScrolltolower" scroll-y v-for="(item, id) in goodsItems" class="scroll-view" :key="item.id"
          v-show="id === activeId">
          <view class="goods">
            <navigator hover-class="none" class="navigator" v-for="goods in item.items" :key="goods.id"
              :url="`/pages/goods/index?id=${goods.id}`">
              <image class="thumb" :src="goods.picture"></image>
              <view class="name ellipsis">{{ goods.name }}</view>
              <view class="price">
                <text class="symbol">¥</text>
                <text class="number">{{ goods.price }}</text>
              </view>
            </navigator>
          </view>
          <view class="loading">正在加载...</view>
        </scroll-view>
      </view>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app';
import { getRecomendsAPI } from "@/api/home";
import { ref, computed } from "vue";
const bannerPicture = ref('')
const goodsItems = ref({})
const subTypes =ref([])
const activeId =ref("")
// 1. 声明对象`urlMap`，保存title与url等信息
const urlMap = {
    1: { title: "特惠推荐", url: "/home/preference/mutli" },
    2: { title: "爆款推荐", url: "/home/inVogue/mutli" },
    3: { title: "一站买全", url: "/home/oneStop/mutli" },
    4: { title: "新鲜好物", url: "/home/new/mutli" } // 后端未提供，暂用新鲜好物url
    
}
let type = -1
// 在微信小程序中 生命周期函数 页面  onLoad(option)  option 会当前页面的查询参数 
onLoad(async (opc ) => {
    type= opc.type
    // console.log(option);
    // 动态设置 导航栏标题
    const currentItem = urlMap[type];
    uni.setNavigationBarTitle({ title: currentItem.title });
    const { result } = await getRecomendsAPI(currentItem.url);
    console.log(result);
    bannerPicture.value = result.bannerPicture
    goodsItems.value=result.goodsItems
    subTypes.value = result.subTypes
    activeId.value = subTypes.value[0].id

})

// 当前显示列表数据 
const currentData = computed(() => {
    return goodsItems.value[activeId.value]
})
const onScrolltolower = async () => {
//   判断下一页是否还有数据
if (currentData.value.page>= currentData.value.pages) {
    uni.showToast({ title: "没有更多数据啦", icon: "none" })
        return 
}

    const option = {
        url: urlMap[type].url,
        data: {
            page: currentData.value.page + 1,
            pageSize: 10,
            subType: activeId.value
        }
    }
    // console.log("111", urlMap[type].url,);
    const {result} = await getRecomendsAPI(option.url, option.data.subType, option.data.page, option.data.pageSize);
    //  console.log(result);
    //  // 请求成功,手动的把自己存起来的 数据 页码+1.下次 请求分页的时候 页面才会递增 
    goodsItems.value[activeId.value].page++

    // 数据合并
    goodsItems.value[activeId.value].items = [...goodsItems.value[activeId.value].items, ...result.goodsItems[activeId.value].items]
}
</script>

<style lang="scss">
page {
    height: 100%;
    background-color: #f4f4f4;
}

.viewport {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 180rpx 0 0;
    position: relative;
}

.cover {
    width: 750rpx;
    height: 225rpx;
    border-radius: 0 0 40rpx 40rpx;
    overflow: hidden;
    position: absolute;
    left: 0;
    top: 0;
}

.tabs {
    display: flex;
    justify-content: space-evenly;
    height: 100rpx;
    line-height: 90rpx;
    margin: 0 20rpx;
    font-size: 28rpx;
    border-radius: 10rpx;
    box-shadow: 0 4rpx 5rpx rgba(200, 200, 200, 0.3);
    color: #333;
    background-color: #fff;
    position: relative;
    z-index: 9;

    .text {
        margin: 0 20rpx;
        position: relative;
    }

    .active {
        &::after {
            content: "";
            width: 40rpx;
            height: 4rpx;
            transform: translate(-50%);
            background-color: #27ba9b;
            position: absolute;
            left: 50%;
            bottom: 24rpx;
        }
    }
}

.scroll-view {
    flex: 1;
    overflow: hidden;
}

.goods {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    padding: 0 20rpx 20rpx;

    .navigator {
        width: 345rpx;
        padding: 20rpx;
        margin-top: 20rpx;
        border-radius: 10rpx;
        background-color: #fff;
    }

    .thumb {
        width: 305rpx;
        height: 305rpx;
    }

    .name {
        height: 88rpx;
        font-size: 26rpx;
    }

    .price {
        line-height: 1;
        color: #cf4444;
        font-size: 30rpx;
    }
}

.goods .symbol,
.goods .decimal {
    font-size: 70%;
}</style>